package com.xuecheng.media.service;


import com.xuecheng.base.model.dto.PageParams;
import com.xuecheng.base.model.dto.PageResult;
import com.xuecheng.base.model.dto.RestResponse;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamsDto;
import com.xuecheng.media.model.dto.UploadFileResultDto;
import com.xuecheng.media.model.po.MediaFiles;
import org.springframework.web.bind.annotation.RequestBody;

import java.io.File;
import java.util.List;

/**
 * @author Mr.M
 * @version 1.0
 * @description 媒资文件管理业务类
 * @date 2022/9/10 8:55
 */
public interface MediaFileService {

    /**
     * @param pageParams          分页参数
     * @param queryMediaParamsDto 查询条件
     * @return com.xuecheng.base.model.PageResult<com.xuecheng.media.model.po.MediaFiles>
     * @description 媒资文件查询方法
     * @author Mr.M
     * @date 2022/9/10 8:57
     */
    public PageResult<MediaFiles> queryMediaFiles(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

    /**
     * 上传普通文件
     *
     * @param companyId
     * @param localPtah           本地文件路径
     * @param uploadFileParamsDto 上传参数模型
     * @return com.xuecheng.media.model.dto.UploadFileResultDto
     */
    public UploadFileResultDto upload(Long companyId, String localPtah, UploadFileParamsDto uploadFileParamsDto,String objectName);

    /**
     * 通过md5检查文件
     *
     * @param fileMd5
     * @return
     */
    public RestResponse<Boolean> checkFile(String fileMd5);

    /**
     * 通过MD5检查分块文件
     *
     * @param fileMd5
     * @return
     */
    public RestResponse<Boolean> checkChunk(String fileMd5);

    /**
     * 上传分块文件
     *
     * @param localChunkFilePath 文件本地路径
     * @param fileMd5
     * @param chunkIndex
     * @return
     */
    public RestResponse<Boolean> uploadChunk(String localChunkFilePath, String fileMd5, int chunkIndex);

    /**
     * 合并分块接口
     *
     * @param companyId
     * @param uploadFileParamsDto
     * @param chunkTotal
     * @param fileMd5
     * @return
     */
    public RestResponse mergeChunks(Long companyId, UploadFileParamsDto uploadFileParamsDto, int chunkTotal, String fileMd5);

    /**
     * 文件入库
     *
     * @param fileMD5
     * @param bucket
     * @param objcetName
     * @param uploadFileParamsDto
     * @param companyId
     * @return
     */
    public MediaFiles addMediaFilesToDB(String fileMD5, String bucket, String objcetName, UploadFileParamsDto uploadFileParamsDto, Long companyId);

    /**
     * 从minio下载文件
     *
     * @param fileMd5
     * @param extension
     * @return
     */
    public File downloadFileFromMinIO(String fileMd5, String extension,String bucket);

    /**
     * 上传文件到minio
     *
     * @param bucket
     * @param mimeType
     * @param objectName
     * @param localPath
     * @return
     */
    public boolean addMediaFilesToMinIO(String bucket, String mimeType, String objectName, String localPath);

    /**
     * 根据id查询媒资信息
     * @param MediaId
     * @return
     */

    public MediaFiles getFileById(String MediaId);

}
